vue源码：vue 2.6版本
node_modules\vue\src
    compiler 模板解析和编译相关的文件
    core  核心代码 vue架构 内置组件 全局api 观察者 vdom
    platforms 平台相关的内容
    server 服务器端 渲染相关的
    sfc  .vue解析文件
    shared 公共工具 

    运行： npm run serve / dev

    new Vue  ---》 src\platforms\web\entry-runtime-with-compiler
    /runtime/index -->core/index -->instance/index(new Vue 核心文件)

    instance/index
        function vue --》 不是class 
        原因：mixins  或 这其他的公共方法 --》vue.prototype上的方法

        initMixin(Vue) // 初始化的入口，各种初始化相关    ********  监听器  watcher props
        stateMixin(Vue) // 绑定数据的核心  data props     ****
        eventsMixin(Vue) // 初始化事件
        lifecycleMixin(Vue)// 生命周期
        renderMixin(Vue) // 渲染相关的方法， vnod虚拟dom  *******

        instanc / init
            1.当前vm(vue实例)添加了一个唯一的_uid
            2.vm._isVue设为true（监听对象变化时用于过滤vm）
            3.初始话组件
            4.初始化各种内容，包括生命周期，事件 虚拟DOM 父子组件
            5.检测到如果有 el 属性，则调用 vm.$mount 方法挂载 vue实例

        renderMixin(Vue) // 渲染相关的方法
        渲染：三种 自定render  template  el方式都可以进行渲染

        render函数  instance/lifecycle.js 通过watcher绑定  
        每个数据发生变化的时候，执行update方法 ---》vm._render()

        调用vm._render ---> 虚拟DOM 
        DOM模型通过diff算法 查找节点的差异，进行替换 覆盖 删除 添加
        最终 才会虚拟DOM节点转化成真实DOM 给你放到页面中

        vue渲染 小结：
            1. new vue 执行初始化
            2  挂载$mount 通过render函数  生成渲染树
            3. 通过watcher 监听数据变化
            4. 数据变化时，render函数生成vnode虚拟节点
            5.通过patch 对新旧节点vnode 进行比较 通过diff算，增删真实的DOM





